import request from '../utils/request.js'
import { getUserInfo } from '../utils/auth.js'
import config from '../config.js'

// API接口基础路径
const API_PREFIX = '/bloodSugar'

/**
 * 获取用户ID的工具函数，检查多个可能的存储位置
 * @returns {Number|null} - 用户ID或null
 */
function getUserId() {
  // 优先使用auth工具获取
  const userInfo = getUserInfo()
  if (userInfo && userInfo.id) {
    return userInfo.id
  }
  
  // 尝试从xuetang_user_info获取
  const xuetangUserInfo = uni.getStorageSync('xuetang_user_info')
  if (xuetangUserInfo && xuetangUserInfo.id) {
    return xuetangUserInfo.id
  }
  
  // 尝试从userInfo获取
  const legacyUserInfo = uni.getStorageSync('userInfo')
  if (legacyUserInfo && legacyUserInfo.id) {
    return legacyUserInfo.id
  }
  
  // 最后尝试从store获取
  try {
    const store = getApp().$pinia?.state?.value?.user
    if (store && store.userInfo && store.userInfo.id) {
      return store.userInfo.id
    }
  } catch (e) {
    console.error('从store获取用户ID失败', e)
  }
  
  return null
}

/**
 * 获取血糖记录列表
 * @param {Object} params - 查询参数
 * @returns {Promise<Object>} - 返回血糖记录数据
 */
export function getRecords(params = {}) {
  // 获取用户ID
  const userId = getUserId()
  
  // 确保参数中包含用户ID
  if (!params.userId && userId) {
    params.userId = userId
  }
  
  return request({
    url: '/bloodSugar/records',
    method: 'GET',
    data: params
  })
}

/**
 * 获取血糖记录列表 - 为首页血糖分析使用
 * @returns {Promise} Promise对象
 */
export const getBloodSugarRecords = () => {
  // 获取用户ID
  const userId = getUserId()
  
  return request({
    url: '/bloodSugar/records',
    method: 'GET',
    data: { userId }
  }).then(response => {
    // 处理嵌套响应格式
    if (response.code === 0 && response.data && response.data.records) {
      // 将嵌套结构扁平化处理
      return {
        code: response.code,
        message: response.message,
        data: response.data.records
      }
    }
    return response
  })
}

/**
 * 获取血糖统计数据，用于显示在分析图表中
 * @param {String} timeRange 时间范围：day/week/month/year
 * @returns {Promise} Promise对象
 */
export const getBloodSugarStatistics = (timeRange = 'week') => {
  // 获取用户ID
  const userId = getUserId()
  
  // 调用真实API，并传入用户ID
  return request({
    url: '/bloodSugar/statistics',
    method: 'GET',
    data: { 
      userId,
      timeRange
    }
  })
}

/**
 * 获取血糖记录详情
 * @param {Number} id - 记录ID
 * @returns {Promise<Object>} - 返回血糖记录详情
 */
export function getRecordDetail(id) {
  return request({
    url: `/bloodSugar/records/${id}`,
    method: 'GET'
  })
}

/**
 * 添加血糖记录
 * @param {Object} data - 血糖记录数据
 * @returns {Promise<Object>} - 返回添加结果
 */
export function addRecord(data) {
  // 确保记录中包含用户ID
  if (!data.userId) {
    const userId = getUserId()
    if (userId) {
      data.userId = userId
    }
  }
  
  return request({
    url: '/bloodSugar/records',
    method: 'POST',
    data
  })
}

/**
 * 更新血糖记录
 * @param {Number} id - 记录ID
 * @param {Object} data - 要更新的数据
 * @returns {Promise<Object>} - 返回更新结果
 */
export function updateRecord(id, data) {
  // 确保记录中包含用户ID
  if (!data.userId) {
    const userId = getUserId()
    if (userId) {
      data.userId = userId
    }
  }
  
  return request({
    url: `/bloodSugar/records/${id}`,
    method: 'PUT',
    data
  })
}

/**
 * 删除血糖记录
 * @param {Number} id - 记录ID
 * @param {Number} userId - 用户ID
 * @returns {Promise<Object>} - 返回删除结果
 */
export function deleteRecord(id, userId) {
  // 如果未提供用户ID，则自动获取
  if (!userId) {
    userId = getUserId()
  }
  
  return request({
    url: `/bloodSugar/records/${id}`,
    method: 'DELETE',
    data: { userId }
  })
}

/**
 * 获取血糖统计数据
 * @param {Object} params - 查询参数
 * @returns {Promise<Object>} - 返回统计数据
 */
export function getStatistics(params = {}) {
  // 确保参数中包含用户ID
  if (!params.userId) {
    const userId = getUserId()
    if (userId) {
      params.userId = userId
    }
  }
  
  return request({
    url: '/bloodSugar/statistics',
    method: 'GET',
    data: params
  })
}

/**
 * 获取血糖趋势数据
 * @param {Object} params - 查询参数
 * @returns {Promise<Object>} - 返回趋势数据
 */
export function getTrend(params = {}) {
  // 确保参数中包含用户ID
  if (!params.userId) {
    const userId = getUserId()
    if (userId) {
      params.userId = userId
    }
  }
  
  return request({
    url: '/bloodSugar/trend',
    method: 'GET',
    data: params
  })
}

/**
 * 获取按测量类型分组的血糖数据
 * @param {Object} params - 查询参数
 * @returns {Promise<Object>} - 返回分组数据
 */
export function getByMeasureType(params = {}) {
  // 确保参数中包含用户ID
  if (!params.userId) {
    const userId = getUserId()
    if (userId) {
      params.userId = userId
    }
  }
  
  return request({
    url: '/bloodSugar/by-measure-type',
    method: 'GET',
    data: params
  })
}

/**
 * 检查血糖值状态
 * @param {Number} value - 血糖值
 * @param {Number} measureType - 测量类型
 * @returns {Promise<Object>} - 返回状态信息
 */
export function checkBloodSugarStatus(value, measureType) {
  return request({
    url: '/bloodSugar/check-status',
    method: 'GET',
    data: {
      value,
      measureType
    }
  })
}

/**
 * 将测量类型文本转换为对应的编码
 * @param {String} typeText - 测量类型文本
 * @returns {Number} - 返回测量类型编码
 */
export function getMeasureTypeCode(typeText) {
  const typeMap = {
    '空腹': 1,
    '餐前': 2,
    '餐后1小时': 3,
    '餐后2小时': 4,
    '睡前': 5,
    '凌晨': 6,
    '随机': 7
  }
  return typeMap[typeText] || 1
}

/**
 * 将测量类型编码转换为对应的文本
 * @param {Number} typeCode - 测量类型编码
 * @returns {String} - 返回测量类型文本
 */
export function getMeasureTypeText(typeCode) {
  const typeMap = {
    1: '空腹',
    2: '餐前',
    3: '餐后1小时',
    4: '餐后2小时',
    5: '睡前',
    6: '凌晨',
    7: '随机'
  }
  return typeMap[typeCode] || '未知'
}

/**
 * 根据血糖值和测量类型获取状态文本
 * @param {Number} value - 血糖值
 * @param {Number} measureType - 测量类型
 * @returns {String} - 返回状态文本
 */
export function getStatusText(value, measureType) {
  // 根据测量类型获取正常范围
  let lowerLimit, upperLimit
  switch (measureType) {
    case 1: // 空腹
      lowerLimit = 3.9
      upperLimit = 6.1
      break
    case 2: // 餐前
      lowerLimit = 3.9
      upperLimit = 6.1
      break
    case 3: // 餐后1小时
      lowerLimit = 3.9
      upperLimit = 10.0
      break
    case 4: // 餐后2小时
      lowerLimit = 3.9
      upperLimit = 7.8
      break
    case 5: // 睡前
      lowerLimit = 3.9
      upperLimit = 7.0
      break
    default:
      lowerLimit = 3.9
      upperLimit = 7.8
  }
  
  // 判断状态
  if (value < lowerLimit) {
    return '偏低'
  } else if (value > upperLimit) {
    return '偏高'
  } else {
    return '正常'
  }
}

export default {
  getRecords,
  getRecordDetail,
  addRecord,
  updateRecord,
  deleteRecord,
  getStatistics,
  getBloodSugarRecords,
  getBloodSugarStatistics
} 